import {otherRouter, appRouter} from '@/router/router';
import Util from '@/libs/util';
import Cookies from 'js-cookie';
import Vue from 'vue';
// import tool from '../../js/core/utils/tool';

const app = {
  state: {
    loadingText: '加载中...',
    page: 1,
    limit: 10,
    totalElement: 100,
    searchListLoading: false,
    actionLoading: false,
    cachePage: [],
    lang: '',
    isFullScreen: false,
    openedSubmenuArr: [], // 要展开的菜单数组
    menuTheme: 'dark', // 主题
    themeColor: '',
    pageOpenedList: [{
      title: '首页',
      path: '',
      name: 'home'
    }],
    currentPageName: '',
    currentPath: [
      {
        title: '首页',
        path: '',
        name: 'home'
      }
    ], // 面包屑数组
    menuList: [],
    routers: [
      otherRouter,
      ...appRouter
    ],
    // tagsList: [...otherRouter.children],
    tagsList: [],
    messageCount: 0,
    dontCache: ['text-editor', 'artical-publish'] // 在这里定义你不想要缓存的页面的name属性值(参见路由配置router.js)
  },
  mutations: {
    searchLoading (state, boolean) {
      state.searchListLoading = boolean;
    },
    actionLoading (state, boolean) {
      state.actionLoading = boolean;
    },
    setTagsList (state, list) {
      state.tagsList.push(...list);
    },
    updateMenulist (state) {
      let buttonList = Cookies.get('buttonList');
      let menuList = [];
      appRouter.forEach((item, index) => {
          if (item.name !== undefined) {
              if (buttonList.indexOf(',' + item.name + ',') > -1 || Cookies.get('user') === 'admin') {
                  if (item.children.length === 1 || Cookies.get('user') === 'admin') {
                      menuList.push(item);
                  } else {
                      let len = menuList.push(item);
                      let childrenArr = [];
                      childrenArr = item.children.filter(child => {
                        // 剔除菜单
                          if (child.name !== undefined) {
                              if (buttonList.indexOf(',' + child.name + ',') > -1) {
                                  return child;
                              }
                          } else {
                              return child;
                          }
                      });
                      menuList[len - 1].children = childrenArr;
                  }
              }
          }
      });
      // 管理员添加所有页面权限
      state.menuList = menuList;
    },
    changeMenuTheme (state, theme) {
      state.menuTheme = theme;
    },
    changeMainTheme (state, mainTheme) {
      state.themeColor = mainTheme;
    },
    addOpenSubmenu (state, name) {
      let hasThisName = false;
      let isEmpty = false;
      if (name.length === 0) {
        isEmpty = true;
      }
      if (state.openedSubmenuArr.indexOf(name) > -1) {
        hasThisName = true;
      }
      if (!hasThisName && !isEmpty) {
        state.openedSubmenuArr.push(name);
      }
    },
    closePage (state, name) {
      state.cachePage.forEach((item, index) => {
        if (item === name) {
          state.cachePage.splice(index, 1);
        }
      });
    },
    initCachepage (state) {
      if (localStorage.cachePage) {
        state.cachePage = JSON.parse(localStorage.cachePage);
      }
    },
    removeTag (state, name) {
      state.pageOpenedList.map((item, index) => {
        if (item.name === name) {
          state.pageOpenedList.splice(index, 1);
        }
      });
    },
    pageOpenedList (state, get) {
      let openedPage = state.pageOpenedList[get.index];
      if (get.argu) {
        openedPage.argu = get.argu;
      }
      if (get.query) {
        openedPage.query = get.query;
      }
      state.pageOpenedList.splice(get.index, 1, openedPage);
      localStorage.pageOpenedList = JSON.stringify(state.pageOpenedList);
    },
    clearAllTags (state) {
      state.pageOpenedList.splice(1);
      state.cachePage.length = 0;
      localStorage.pageOpenedList = JSON.stringify(state.pageOpenedList);
    },
    clearOtherTags (state, vm) {
      let currentName = vm.$route.name;
      let currentIndex = 0;
      state.pageOpenedList.forEach((item, index) => {
        if (item.name === currentName) {
          currentIndex = index;
        }
      });
      if (currentIndex === 0) {
        state.pageOpenedList.splice(1);
      } else {
        state.pageOpenedList.splice(currentIndex + 1);
        state.pageOpenedList.splice(1, currentIndex - 1);
      }
      let newCachepage = state.cachePage.filter(item => {
        return item === currentName;
      });
      state.cachePage = newCachepage;
      localStorage.pageOpenedList = JSON.stringify(state.pageOpenedList);
    },
    setOpenedList (state) {
      state.pageOpenedList = localStorage.pageOpenedList ? JSON.parse(localStorage.pageOpenedList) : [otherRouter.children[0]];
    },
    setCurrentPath (state, pathArr) {
      state.currentPath = pathArr;
    },
    setCurrentPageName (state, name) {
      state.currentPageName = name;
    },
    setAvator (state, path) {
      localStorage.avatorImgPath = path;
    },
    switchLang (state, lang) {
      state.lang = lang;
      Vue.config.lang = lang;
    },
    clearOpenedSubmenu (state) {
      state.openedSubmenuArr.length = 0;
      localStorage.pageOpenedList = '';
      state.pageOpenedList = [otherRouter.children[0]];
    },
    setMessageCount (state, count) {
      state.messageCount = count;
    },
    increateTag (state, tagObj) {
      if (!Util.oneOf(tagObj.name, state.dontCache)) {
        state.cachePage.push(tagObj.name);
        localStorage.cachePage = JSON.stringify(state.cachePage);
      }
      state.pageOpenedList.push(tagObj);
      localStorage.pageOpenedList = JSON.stringify(state.pageOpenedList);
    }
  }
};

export default app;
